class Cup {
    Cup(int marker) {
        System.out.println("Cup(" + marker + ")");
    }

    void cup_method(int marker) {
        System.out.println("cup_method(" + marker + ")");
    }
}

class Cups {
    static Cup cup1;
    static Cup cup2;

    static {
        cup1 = new Cup(1);
        cup2 = new Cup(2);
    }

    Cups() {
        System.out.println("Cups()");
    }
}

public class ExplicitStatic {
    public static void main(String[] args) {
        System.out.println("Inside main()");
        Cups.cup1.cup_method(100);  // 方式[1]
    }

//    static Cups cups1 = new Cups();  // 方式[2]
//    static Cups cups2 = new Cups();
}

/*
显式的静态初始化
Java允许在一个类里将多个静态初始化语句放在一个特殊的“静态子句”里（有时称为静态块）。

无论是通过方式[1]访问静态对象cup1，还是注释掉方式[1]并取消方式[2]的注释来运行，Cups的静态初始化动作都会发生。
如果把方式[1]和方式[2]同时注释掉，Cups的静态初始化动作就不会发生。
此外，方式[2]运行一次还是两次无关紧要，静态初始化动作只会发生一次。
 */